

#ifndef GISCOREAO_INTERFACE_H
#define GISCOREAO_INTERFACE_H

#include <stdint.h>
#include <string>
#include "app_platform/cntl_info.h"

#include "erp/gis/po/shiptypeareagischeckpo_gis.h"	
#include "erp/gis/po/mergedcoordinatespo_gis.h"	
#include <map>	
#include <vector>	


namespace erp
{
namespace gis
{
namespace ao
{

	/// 同步调用接口
	class IGisCoreAo	{
	public:
		virtual ~IGisCoreAo() {}

	public:

		/**
		 *
	 	 * 检测目标地址对应的配送方式是否被覆盖 
		 *
		 *@param String machineKey: 机器码，必填，对应网站cookie中的visitkey，若无则填随机值 				
		 *@param String source: 调用来源文件名称，必填 				
		 *@param uint32_t sceneId: 场景id，必填（目前填0即可） 				
		 *@param ShipTypeAreaGisCheckPo shipTypeAreaGisCheckPo: 配送方式信息确认PO 				
		 *@param String inReserve: 请求保留字段 				
		 *@param Map CheckResult: 配送方式是否可达结果信息, key 配送方式； value 结果  其中 1：代表可配送，0：代表不可配送 		
		 *@param String errMsg: 错误信息 		
		 *@param String outReserve: 请求保留字段 		
		 *
		 *@return  uint32_t : 0(成功) 其它失败
 	     *
		 */
	    virtual uint32_t CheckAreaCover(
				const CCntlInfo& rCntlInfo,

				const std::string& machineKey,
				const std::string& source,
				uint32_t sceneId,
				const erp::gis::po::CShipTypeAreaGisCheckPo& shipTypeAreaGisCheckPo,
				const std::string& inReserve,
				std::map<uint32_t,uint32_t >& CheckResult,
				std::string& errMsg,
				std::string& outReserve
	    	) = 0;

		/**
		 *
	 	 * 获取合并经纬度 
		 *
		 *@param String machineKey: 机器码，必填，对应网站cookie中的visitkey，若无则填随机值 				
		 *@param String source: 调用来源文件名称，必填 				
		 *@param uint32_t sceneId: 场景id，必填（目前填0即可） 				
		 *@param String destAddrProvince: 送达地省份,仅支持UTF8格式输入 				
		 *@param String destAddrCity: 送达地市,仅支持UTF8格式输入, 必填 				
		 *@param String destAddrDistrict: 送达地区,仅支持UTF8格式输入 				
		 *@param String destAddrText: 送达地的详细地址(不包括省市区),仅支持UTF8格式输入, 必填 				
		 *@param String inReserve: 请求保留字段 				
		 *@param MergedCoordinatesPo mergedCoordinatesPo: 合并后的经纬度信息  		
		 *@param String errMsg: 错误信息 		
		 *@param String outReserve: 请求保留字段 		
		 *
		 *@return  uint32_t : 0(成功) 其它失败
 	     *
		 */
	    virtual uint32_t GetMergeCoordinate(
				const CCntlInfo& rCntlInfo,

				const std::string& machineKey,
				const std::string& source,
				uint32_t sceneId,
				const std::string& destAddrProvince,
				const std::string& destAddrCity,
				const std::string& destAddrDistrict,
				const std::string& destAddrText,
				const std::string& inReserve,
				erp::gis::po::CMergedCoordinatesPo& mergedCoordinatesPo,
				std::string& errMsg,
				std::string& outReserve
	    	) = 0;
	};

	///异步调用接口
	class IGisCoreAoAsyc
	{
	public:
		virtual ~IGisCoreAoAsyc() {}
	public:
		virtual uint32_t SendCheckAreaCover(
				const CCntlInfo& rCntlInfo,

				const std::string& machineKey,
				const std::string& source,
				uint32_t sceneId,
				const erp::gis::po::CShipTypeAreaGisCheckPo& shipTypeAreaGisCheckPo,
				const std::string& inReserve
				) = 0;
		virtual uint32_t RecvCheckAreaCover(
				const CCntlInfo& rCntlInfo,

				std::map<uint32_t,uint32_t >& CheckResult,
				std::string& errMsg,
				std::string& outReserve
				) = 0;
		virtual uint32_t SendGetMergeCoordinate(
				const CCntlInfo& rCntlInfo,

				const std::string& machineKey,
				const std::string& source,
				uint32_t sceneId,
				const std::string& destAddrProvince,
				const std::string& destAddrCity,
				const std::string& destAddrDistrict,
				const std::string& destAddrText,
				const std::string& inReserve
				) = 0;
		virtual uint32_t RecvGetMergeCoordinate(
				const CCntlInfo& rCntlInfo,

				erp::gis::po::CMergedCoordinatesPo& mergedCoordinatesPo,
				std::string& errMsg,
				std::string& outReserve
				) = 0;
	};
	
	
}
}
}

#endif /*GISCOREAO_INTERFACE_H*/
